LUA(linguagem de programaçao)
Lua é uma linguagem de script imperativa, procedural, pequena, reflexiva e leve, projetada para expandir aplicações em geral, por ser uma linguagem extensível (que une partes de um programa feitas em mais de uma linguagem), para prototipagem e para ser embarcada em softwares complexos, como jogos. Assemelha-se com Python, Ruby e Icon, entre outras. Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a Blizzard Entertainment, por exemplo, usou a linguagem no jogo World of Warcraft), ou no jogo Tibia, controle de robôs, processamento de texto, etc. Também é frequentemente usada como uma linguagem de propósito geral. Lua combina programação procedural com poderosas construções para descrição de dados, baseadas em tabelas associativas e semântica extensível. É tipada dinamicamente, interpretada a partir de bytecodes, e tem gerenciamento automático de memória com coleta de lixo. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida. Exemplo O Programa "Olá Mundo" ou "Hello World" pode ser escrito da seguinte forma: print "Olá, Mundo!" A função fatorial recursiva: function fact(n) if n 0 then return 1 else return n * fact(n - 1) end end O cálculo dos n primeiros números perfeitos: function perfeitos(n) cont=0 x=0 print('Os numeros perfeitos sao ') repeat x=x+1 soma=0 for i=1,(x-1) do if math.mod(x,i) 0 then soma=soma+i; end end if soma x then print(x) cont = cont+1 end until cont n print('Pressione qualquer tecla para finalizar...') end O tratamento das funções como variáveis de primeira classe é mostrado no exemplo a seguir, onde o comportamento da função “print” é modificado: do local oldprint = print -- Grava a variável “print” em “oldprint” print = function(s) -- Redefine a função “print” if s "foo" then oldprint("bar") else oldprint(s) end end end Qualquer chamada da função “print” agora será executada através da nova função, e graças ao escopo léxico de Lua, a função “print” antiga só será acessível pelo nova. Lua também suporta funções closure, como demonstrado abaixo: function makeaddfunc(x) -- Retorna uma nova função que adiciona x ao argumento return function(y) return x + y end end plustwo = makeaddfunc(2) print(plustwo(5)) -- Prints 7 Um novo “closure” é criado para a variável x cada vez que a função “makeaddfunc” é chamada, de modo que a função anônima a ser retornada sempre irá acessar seu próprio parâmetro x. O “closure” é gerenciado pelo coletor de lixo (garbage collector) da linguagem, tal como qualquer outro objeto. Uma característica essencial de Lua é a semântica Extensível, e o conceito de “metatables” permite que as tabelas Lua sejam personalizadas em poderosas e exclusivas formas. O exemplo a seguir mostra uma tabela “infinita”. Para qualquer valor “n”, “fibs n” dará o enésimo número Fibonacci usando programação dinâmica. fibs = { 1, 1 } -- Valores iniciais de fibs1 e fibs2. setmetatable(fibs, { __index = function(name, n) -- Função chamada se fibsn não existir namen = name- 1 + name- 2 -- Calcula e grava fibsn. return namen end })